#!/usr/bin/bash
#系统信息  资源限制检查和更改 内存和硬盘  创建用户组 创建目录


#check system infomation
function sysInfo(){\
    echo "###########################################################"
    echo -e "System bit is: \e[1;32m $(getconf LONG_BIT) \e[0m"
    echo -e "System release is: \e[1;32m $(lsb_release -a) \e[0m"
    echo -e "System infomation is: \e[1;32m $(cat /etc/issue) \e[0m"
    echo -e "System name is: \e[1;32m $(uname -a) \e[0m"
    echo "###########################################################"
}

#check system resource limit
function sysLimit(){
    echo "###########################################################"
    echo -e "\033[1;32mSystem resource limit:   \033[0m"
    ulimit -a
    echo -e "\033[1;32mAdvice: \033[0m"
    echo "##data seg size 建议设置为 1048576 以上或 unlimited，此参数过小将导 致数据库启动失败。
          ##file size 建议设置 unlimited(无限制)，此参数过小导致数据库安装或初 始化失败。
          ##open files 建议设置为 65536 以上或 unlimited。
          ##virtual memory 建议设置为 1048576 以上或 unlimited，此参数过小 将导致数据库启动失败。
          ##max user processes 最大线程数这个参数建议修改为 10240。##"
}
#modify system resource limit
function modifySysLimit(){
    echo "###########################################################"
    echo "before:"
    tail -10n /etc/security/limits.conf #-f是不断刷星的参数；-n是显示最后多少行的意思；
    echo "backup ing"
    cd /etc/security && cp limits.conf limits.conf_bak
    if [[ $? ]];then
        echo "backup success!"
    fi
    sed -ri '$ a\* soft nofile 102400\
    * hard nofile 102400\
    dmdba soft nproc 102400\
    dmdba hard nproc 102400 ' /etc/security/limit.conf

    echo "after:"
    tail -10n /etc/security/limit.conf

    echo "Please reboot the system"
    echo "###########################################################"
}

#check memory
function memoryFree(){
    echo "###########################################################"
    free -h
    # free -h |grep Mem |awk 'BEGIN{} {if(($4>1024)){print "可用的内存为：\033[1;32m" $4 " 可安装!\033[0m"}  else{ print"可用内存为:\033[1;32m"  $4  "，小于空间容量1G ，不可安装！\033[0m"}}     END{}'
    #主要是使用awk命令，利用正则表达式取某一行，利用内置变量取第n列，然后判断是否大于1G；
    echo "###########################################################"    
}

#check disk
function diskFree(){
    echo "###########################################################"    
    df -h
    #dameng安装需要1g的存储空间；
    #颜色输出和echo一样，也要加\033[1;32m和\033[0m，然后这两个东西还要再“”里，不然识别不出来；
   # df -h |grep /c |awk 'BEGIN{} {if($4>1){print "安装目录空间为：\033[1;32m" $1,$2,$3,$5,$6,$4 " 可安装!\033[0m"}  else{ print"安装目录可用空间:\033[1;32m"  $4  "，小于空间容量1G ，不可安装！\033[0m"}}     END{}'
    #dameng安装还需要1g的临时空间；这里首先要看/tmp目录是否有大于1G的空间，如果有则可以安装，如果没有，需要拓展/tmp或者指定；
   # df -h |grep /tmp  |awk 'BEGIN{} {if($4>1){print "临时目录可用空间:\033[1;32m" $1,$2,$3,$4,$5,$4  "可安装！\033[0m"} else{ print"临时目录可用空间:\033[1;32m"  $4  "，小于空间容量1G ，不可安装！\033[0m"} } END{}'
    echo "###########################################################"
}


#add user and mkdir dir
function addUserAndMkdir(){
    echo "###########################################################"
    #add user
    groupadd dinstall
    useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
    echo "Please enter the password for new user:"
    passwd dmdba

    read -p "parent dir path：" pDP

    #mkdir
    echo "$pDP"
    mkdir -p $pDP && cd $pDP
    if [ $? ];then #if和【】要有空格，不然会报错，说then未找到；￥？和【】也要用空格；
    mkdir -p ./DM_SOFT
    mkdir -p ./dmdbms/dmdbms
    mkdir -p ./dmdbms/DAMENG
    mkdir -p ./dmdbms/ARCH
    mkdir -p ./dmdbms/BAK
    fi
    #chown
    chown -R dmdba:dinstall $pDP
    #chmod
    chmod -R 755 $pDP
    ls -al
    echo "请切换到dmdba用户，进行安装数据库"
    echo "###########################################################"4


}




while true
do 
select choice in checkSys modifySysLimit addUserAndMkdir  quit
do
    case ${choice} in 
    checkSys)
            sysInfo
            sysLimit
            memoryFree
            diskFree
            break
            ;;
    modifySysLimit)
            modifySysLimit
            break
            ;;
    addUserAndMkdir)
            addUserAndMkdir
            break
            ;;
    quit)
            #exit命令用于退出当前shell；很厉害的命令，如果是bash或者./运行的本脚本，则退出子shell；
            #如果是source 或者. 运行的本脚本，则直接退出了系统创建的用户shell；
            exit
            ;; 
    *)
            echo -e "\e[1;31merror input! Please enter again:   \e[0m"    #31m is red; 32m is green; 0m is  all unset
            break
            ;;
   esac
done
done
